package agentes;

import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextPane;

public class Formula {

	ArrayList<JTextField> opcao = new ArrayList<JTextField>();
	ArrayList<JPanel> panel = new ArrayList<JPanel>();
	int erros[];

	JButton ok;

	Frame frame = new JFrame();

	public Formula() {

	}

	public void setErros(int i[]) {
		erros = i;
	}

	public int[] getErros() {
		return erros;
	}

	public void setPanel(JPanel j, int i) {
		panel.add(i, j);
	}

	public void setBtnValida(JButton o) {
		ok = o;
	}

	public void setOpcao(JTextField op, int i) {
		opcao.add(i, op);
	}

	public JButton getBtnValida() {
		return ok;
	}

	public JTextField getOpcao(int i) {
		return opcao.get(i);
	}

	public JPanel getPanel(int i) {
		return panel.get(i);
	}

	public int getValueOpcao(int i) {
		return Integer.parseInt(opcao.get(i).getText());
	}

	public void setAtencaoOpcao(int i) {
		opcao.get(i).setBorder(
				BorderFactory.createTitledBorder(
						BorderFactory.createLineBorder(Color.yellow), "!"));
	}

	public void setErrorOpcao(int i) {
		opcao.get(i).setBorder(
				BorderFactory.createTitledBorder(
						BorderFactory.createLineBorder(Color.red), "Erro!"));
	}

	public void setOkOpcao(int i) {
		opcao.get(i).setBorder(
				BorderFactory.createTitledBorder(
						BorderFactory.createLineBorder(Color.green), "Certo!"));
	}

	public void setCutOpcao(int i) {
		opcao.get(i).setBorder(
				BorderFactory.createTitledBorder(
						BorderFactory.createLineBorder(Color.blue), "'Corta'"));
	}

	public void removeBtnValida() {
		ok.setVisible(false);
	}

	public void moveBtnValida(int i) {
		ok.setVisible(false);
		ok.setBounds(ok.getBounds().x, ok.getBounds().y + i+8,
				ok.getBounds().width, ok.getBounds().height);
		ok.setVisible(true);

	}

	public void removeAlertOpcao(int i) {
		opcao.get(i).setBorder(BorderFactory.createLineBorder(Color.black));
	}

	public void mostrarAlerta(int tipo) {

		JTextPane txtpnEnunciado = new JTextPane();
		txtpnEnunciado.setContentType("text/html");
		txtpnEnunciado.setFont(new Font("Dialog", Font.PLAIN, 12));
		txtpnEnunciado.setEditable(false);
		txtpnEnunciado.setBackground(new Color(238, 238, 238, 238));

		switch (tipo) {
		// op7 x op8 != 12 .... op9 != 12
		case 1:
			txtpnEnunciado.setText("<br>"
					+ "Você deve ter se confundido no seguinte cálculo: "
					+ getValueOpcao(7) + " x " + getValueOpcao(8) + "<br><br>");
			erros[0]++;
			break;

		// op0 == 2
		case 2:
			if (erros[1] == 0) {
				txtpnEnunciado
						.setText("<br>"
								+ "Você deve estar confundindo o total de elementos (bandas) <br>"
								+ "pelo número de elementos (1° e 2° lugares) a serem escolhidos.<br>"
								+ "Lembre-se que a fórmula é <b>n!/(n-p)!</b> <br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Você deve estar confundindo o total de elementos (bandas) <br>"
								+ "pelo número de elementos (1° e 2° lugares) a serem escolhidos.<br>"
								+ "Lembre-se que a fórmula é <b>n!/(n-p)!</b> <br>"
								+ "sendo <b>n</b> elementos agrupados <b>p</b> a <b>p</b><br><br>");
			}
			erros[1]++;
			break;

		// op1 < op2
		case 3:
			if (erros[2] == 0) {
				txtpnEnunciado
						.setText("<br>"
								+ "No arranjo A(n,p), <b>n</b> é sempre maior ou igual a <b>p</b>"
								+ "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "No arranjo A(n,p), <b>n</b> é sempre maior ou igual a <b>p</b><br>"
								+ "<center>" + getValueOpcao(1) + " é menor "
								+ getValueOpcao(2) + "</center>" + "<br><br>");
			}
			erros[2]++;
			break;

		// op1 == 2 && op2 == 4
		case 4:
			if (erros[3] == 0) {
				txtpnEnunciado
						.setText("<br>"
								+ "Você deve estar confundindo a quantidade de elementos (bandas) <br>"
								+ "com o número de posições (2: primeiro e segundo lugar).<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Você deve estar confundindo a quantidade de elementos (bandas) <br>"
								+ "com o número de posições (2: primeiro e segundo lugar).<br><br>"
								+ "Lembre-se que no arranjo A(n,p), <b>n</b> é sempre maior ou igual a <b>p</b>"
								+ "<br><br>");
			}
			erros[3]++;
			break;

		// op0 > 4
		case 5:
			if (erros[4] == 0) {
				txtpnEnunciado.setText("<br>" + "Observe que o valor indicado "
						+ getValueOpcao(0)
						+ " é superior ao total de elementos." + "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Observe que o valor indicado "
								+ getValueOpcao(0)
								+ " é superior ao total de elementos."
								+ "Lembre-se que a fórmula é <b>n!/(n-p)!</b> <br>"
								+ "sendo <b>n</b> elementos agrupados <b>p</b> a <b>p</b><br><br>");
			}
			erros[4]++;
			break;

		// ops vazios
		case 6:
			if (erros[5] == 0) {
				txtpnEnunciado.setText("<br>" + "Preencha todos os campos!"
						+ "<br><br>");

			} else if (erros[5] == 1) {
				txtpnEnunciado
						.setText("<br>Preencha todos os campos!<br><br>"
								+ "E lembre-se que a fórmula é <b>n!/(n-p)!</b> <br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>Preencha todos os campos!<br><br>"
								+ "E lembre-se que a fórmula é <b>n!/(n-p)!</b> <br>"
								+ "sendo <b>n</b> elementos agrupados <b>p</b> a <b>p</b><br><br>");
			}
			erros[5]++;
			break;

		// fim do exercicio
		case 7:

			txtpnEnunciado
					.setText("<br>"
							+ "Parabéns! Você resolveu corretamente o exercício.<br>"
							+ "Agora, para fixar o conteúdo clique na aba '5- Exercícios de fixação'."
							+ "<br><br>");

			erros[6]++;
			break;

		// op0 < 4
		case 8:
			if (erros[7] == 0) {
				txtpnEnunciado.setText("<br>" + "Observe que o valor indicado "
						+ getValueOpcao(0)
						+ " é inferior ao total de elementos." + "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Observe que o valor indicado "
								+ getValueOpcao(0)
								+ " é inferior ao total de elementos.<br>"
								+ "E lembre-se que a fórmula é <b>n!/(n-p)!</b> <br>"
								+ "sendo <b>n</b> elementos agrupados <b>p</b> a <b>p</b><br><br>");
			}
			erros[7]++;
			break;

		// op1 > 4
		case 9:
			if (erros[8] == 0) {
				txtpnEnunciado.setText("<br>" + "Observe que o valor indicado "
						+ getValueOpcao(1)
						+ " é superior ao total de elementos." + "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Observe que o valor indicado "
								+ getValueOpcao(1)
								+ " é superior ao total de elementos.<br>"
								+ "E lembre-se que a fórmula é <b>n!/(n-p)!</b> <br>"
								+ "sendo <b>n</b> elementos agrupados <b>p</b> a <b>p</b><br><br>");
			}
			erros[8]++;
			break;

		// op1 < 4
		case 10:
			if (erros[9] == 0) {
				txtpnEnunciado.setText("<br>" + "Observe que o valor indicado "
						+ getValueOpcao(1)
						+ " é inferior ao total de elementos." + "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Observe que o valor indicado "
								+ getValueOpcao(1)
								+ " é inferior ao total de elementos.<br>"
								+ "E lembre-se que a fórmula é <b>n!/(n-p)!</b> <br>"
								+ "sendo <b>n</b> elementos agrupados <b>p</b> a <b>p</b><br><br>");
			}
			erros[9]++;
			break;

		// op2 > 2
		case 11:
			if (erros[10] == 0) {
				txtpnEnunciado.setText("<br>" + "Observe que o valor indicado "
						+ getValueOpcao(2)
						+ " é superior ao número de grupos de elementos."
						+ "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Observe que o valor indicado "
								+ getValueOpcao(2)
								+ " é superior ao número de grupos de elementos.<br>"
								+ "E lembre-se que a fórmula é <b>n!/(n-p)!</b> <br>"
								+ "sendo <b>n</b> elementos agrupados <b>p</b> a <b>p</b><br><br>");
			}
			erros[10]++;
			break;

		// op2 < 2
		case 12:
			if (erros[11] == 0) {
				txtpnEnunciado.setText("<br>" + "Observe que o valor indicado "
						+ getValueOpcao(2)
						+ " é inferior ao número de grupos de elementos."
						+ "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Observe que o valor indicado "
								+ getValueOpcao(2)
								+ " é inferior ao número de grupos de elementos.<br>"
								+ "E lembre-se que a fórmula é <b>n!/(n-p)!</b> <br>"
								+ "sendo <b>n</b> elementos agrupados <b>p</b> a <b>p</b><br><br>");
			}
			erros[11]++;
			break;

		// op5 != 2 && ((op3 != 4 && op4 != 3) || (op3 != 4 && op4 != 3))
		case 13:
			if (erros[12] == 0) {
				txtpnEnunciado
						.setText("<br> N! é o representação do fatorial de N.<br>"
								+ "Sendo 0! = 1, N! = N x (N-1)! = N x (N-1) x (N-2) x ... x 0!<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br> N! é o representação do fatorial de N.<br>"
								+ "Sendo 0! = 1, N! = N x (N-1)! = N x (N-1) x (N-2) x ... x 0!<br>"
								+ "Por exemplo, <br>"
								+ "= 3! <br>"
								+ "= 3 x 2! <br>"
								+ "= 3 x 2 x 1! <br>"
								+ "= 3 x 2 x 1 x 0! <br>"
								+ "= 3 x 2 x 1 x 1 = 6." + "<br><br>");
			}
			erros[12]++;
			break;

		// op6 != 2
		case 14:
			txtpnEnunciado
					.setText("<br>"
							+ "Você deve ter se confundido no seguinte cálculo no denominador: "
							+ getValueOpcao(1) + " - " + getValueOpcao(2)
							+ "<br><br>");

			erros[13]++;
			break;

		// op7 != 3 && op8 != 4 || op7 != 4 && op8 != 3
		case 15:
			if (erros[14] == 0) {
				txtpnEnunciado
						.setText("<br>"
								+ "Observe que no passo 2, o 2! do numerador simplifica com o 2! do denominador."
								+ "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Observe que no passo 2, o 2! do numerador simplifica com o 2! do denominador.<br>"
								+ "Restando apenas " + getValueOpcao(3) + " x "
								+ getValueOpcao(4) + "<br><br>");
			}
			erros[14]++;
			break;

		// ops vazio .... (!(f.getValueOpcao(5) == 2 && f.getValueOpcao(3) == 4
		// && f.getValueOpcao(4) == 3) || !(f.getValueOpcao(5) == 2 &&
		// f.getValueOpcao(3) == 3 && f.getValueOpcao(4) == 4));
		case 16:
			if (erros[15] == 0) {
				txtpnEnunciado.setText("<br>Preencha todos os campos!<br><br>");
			} else if (erros[15] == 1) {
				txtpnEnunciado
						.setText("<br>Preencha todos os campos!<br>"
								+ "Observação: N! é o representação do fatorial de N.<br>"
								+ "Sendo 0! = 1, N! = N x (N-1)! = N x (N-1) x (N-2) x ... x 0!<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>Preencha todos os campos!<br>"
								+ "Observação: N! é o representação do fatorial de N.<br>"
								+ "Sendo 0! = 1, N! = N x (N-1)! = N x (N-1) x (N-2) x ... x 0!<br><br>"
								+ "Por exemplo, <br>" + "= 3! <br>"
								+ "= 3 x 2! <br>" + "= 3 x 2 x 1! <br>"
								+ "= 3 x 2 x 1 x 0! <br>"
								+ "= 3 x 2 x 1 x 1 = 6." + "<br><br>");
			}
			erros[15]++;
			break;

		// ops vazios ... op7 != 3 && op8 != 4 || op7 != 4 && op8 != 3
		case 17:
			if (erros[16] == 0) {

				txtpnEnunciado.setText("<br>Preencha todos os campos!<br><br>");

			} else if (erros[16] == 1) {
				txtpnEnunciado
						.setText("<br>Preencha todos os campos!<br>"
								+ "Observe que no passo 2, o 2! do numerador simplifica com o 2! do denominador."
								+ "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>Preencha todos os campos!<br>"
								+ "Observe que no passo 2, o 2! do numerador simplifica com o 2! do denominador.<br>"
								+ "Restando apenas " + getValueOpcao(3) + " x "
								+ getValueOpcao(4) + "<br><br>");
			}
			erros[16]++;
			break;
			
		case 18:
			if (erros[17] == 0) {
				txtpnEnunciado.setText("<br>" + "Preencha todos os campos!"
						+ "<br><br>");

			} else if (erros[17] == 1) {
				txtpnEnunciado
						.setText("<br>Preencha todos os campos!<br><br>"
								+ "Efetue a operação do passo 3!</b> <br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>Preencha todos os campos!<br><br>"
								+ "Efetue a operação do passo 3: "+ getValueOpcao(7) + " x "
								+ getValueOpcao(8) + " <br><br>");
			}
			erros[17]++;
			break;
		}
		JOptionPane.showMessageDialog(frame, txtpnEnunciado);

	}

}
